package com.xiashitech.agent.utils;

public class TypeUtils {
    /**
     * 判断一个类是否为基本数据类型
     */
    public static boolean isPrimitiveOrWrap(Class clazz) {
        try {
            if(clazz == String.class) {
                return true;
            }
            if(clazz.isPrimitive()) {
                return true;
            }
            return ((Class)clazz.getField("TYPE").get(null)).isPrimitive();
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 识别是否请求 image 、js、css 等静态资源，不识别 html、xml、doc、pdf 等
     * @param accept    请求中的 Accept 头信息
     * @param uri       请求 url
     * @return
     *    true: 基本确认是静态资源，可以略过不做 span
     *    false: 识别出不可略过，或者是识别不出来，需要做 span
     */
    public static boolean isSkipAcceptType(String accept, String uri) {
        boolean ret = false;
        if(accept == null || accept == "" )
            return ret;
        // 检查是否请求 css
        if(accept.contains("text/css"))
            return !ret;

        if("*/*".equalsIgnoreCase(accept)) {
            // 检查是否请求 js
            if(uri == null || uri == "")
                return ret;
            int posob = uri.lastIndexOf("/");
            if(posob < 0)
                posob = 0;
            int posb = uri.indexOf(".js", posob+1);
            if(posb < 0)
                return ret;
            int pose = uri.indexOf("?");
            if(pose < 0) {
                if(posb + 3 == uri.length())
                    return !ret;
            } else {
                if(pose - posb == 3)
                    return !ret;
            }
            // 检查请求是否为字体
            posb = uri.indexOf(".woff2", posob + 1);
            if(posb < 0)
                return ret;
            if(pose < 0) {
                if(posb + 6 == uri.length())
                    return !ret;
            } else {
                if(pose - posb == 6)
                    return !ret;
            }
            return ret;
        }
        // 检查是否图片
        String[] accArray = accept.split(",");
        int cnt = 0;
        for(String item: accArray) {
            String[] kv = item.split("/");
            if("image".equalsIgnoreCase(kv[0])) {
                cnt += 1;
            }
        }
        if(accArray.length - 1 == cnt)
            return !ret;
        return ret;
    }
}
